<?php

declare(strict_types=1);

namespace app\model\ec;

use think\Model;
use app\eslib\EsUtils;

/**
 * 优惠券模型类
 * @version 1.0.0
 */
class CouponsModel extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'ec_coupons';

    // 开启自动时间戳（默认为整型int）
    protected $autoWriteTimestamp = true;

    // 定义时间戳字段名
    protected $createTime = 'created_at';
    protected $updateTime = 'updated_at';

    /**
 * 返回 是否无限张数 访问器的数据
 * @return array
 */
public function getIsUnlimitedDataAttr(): array
{
    return [
        ['text' => '否,1=是', 'value' => 0],
    ];
}

/**
 * 返回 是否无限张数 访问器的值
 * @return string
 */
public function getIsUnlimitedTextAttr()
{
    $value = $this->getData('is_unlimited');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getIsUnlimitedDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 状态 访问器的数据
 * @return array
 */
public function getStatusDataAttr(): array
{
    return [
        ['text' => '禁用,1=启用,2=过期,3=领完', 'value' => 0],
    ];
}

/**
 * 返回 状态 访问器的值
 * @return string
 */
public function getStatusTextAttr()
{
    $value = $this->getData('status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}

    /**
     * 使用视图查询
     */
    public function scopeDbView($query)
    {
        return $query->table('v_ec_coupon');
    }

    /**
     * 复制指定的记录
     */
    public static function copy($id)
    {
        $data = self::find($id)->toArray();
        $data['xxx_name'] .= ' - 副本';
        unset($data['id']);
        unset($data['created_at']);
        unset($data['updated_at']);
        try {
            $model = self::create($data);
            return EsUtils::stdMessage(true, '', $model->id);
        } catch (\PDOException $ex) {
            return EsUtils::stdMessage(false, $ex->getMessage());
        }
    }
}
